<?php

namespace App\Service\Index\v1_1_4;

use App\Constants\ErrorCode;
use App\Helpers\AliyunUtil;
use App\Helpers\ConfigUtil;
use App\Model\PayOrder;
use App\Model\UserFreeCall;
use App\Model\UserProfile;
use App\Service\BaseService;

/**
 * 天天福利的头像等信息
 */
class FreeCallInfoService extends BaseService
{
    public function handle()
    {
        $userId = $this->getUserId();
        //是否主播
        $userProfile = UserProfile::getProfile($userId);
        $isHost = UserProfile::checkIsHost($userId, $userProfile);

        //推荐用户列表
        $userIds = $this->getRecUserIds($isHost);
        $userIds = array_slice($userIds, 0, 20);
        $profiles = UserProfile::getUsersProfile($userIds);
        $blurAvatars = [];
        foreach ($profiles as $profile) {
            $blurAvatars[] = UserProfile::buildAvatarHW($profile['avatar'], 260, 360);
        }
        // UserProfile::getBlurAvatars(4, 100);
        $remainTime = (strtotime(date('Y-m-d', strtotime('+1 day'))) - time());

        //今天赠送免费券
        $freeTime = ConfigUtil::getNewFreeCallTime(true);
        //赠送免费券(主播+普通用户)
        if ($isHost) $this->sendHostToday($userId, $freeTime);
        else $this->sendToday($userId, $freeTime);
        return [
            'title' => "天天福利",
            'text' => "您有一张{$freeTime}分钟的免费通话券",
            'avatars' => $blurAvatars,
            'remain_time' => $remainTime,
            'desc_info' => $userProfile->gender == 0
                ? '1. 所有女生，每天赠送30张免费通话券，当天未使用则自动失效；
2. 充值返现奖励：女生使用免费通话券，系统将自动匹配男用户进行通话，成功通话结束后，若对方在2小时内完成充值，女生可得对方首单充值金额50%的奖励，奖励直接发放至用户收入账户，可直接提现；
3. 若同一男用户，接听多个免费话单，“充值返现奖励”将只给最近与其通话的女生；
    
本活动最终解释权归平台所有'
                : '每日免费通话福利规则
1、所有男用户，每天完成首次充值后，即再获得一张免费视频通话券；
2、该免费通话券，当天有效，当天未使用则自动失效；
本活动最终解释权归平台所有',
        ];
    }

    /**
     * 获取推荐的信息
     */
    function getRecUserIds($isHost = false)
    {
        $userIds = $isHost ? UserProfile::getNewUsers(UserProfile::ROLE_USER, 1, 20) : UserProfile::getRecHosts(0);
        return $userIds;
    }

    /**
     * 今天赠送（普通用户）
     */
    function sendToday($userId = 0, $freeTime = 2)
    {
        //当天已赠送的张数
        $freeCount = UserFreeCall::checkValid($userId, date('Y-m-d'), -2, 'count');
        //当天已经充值的笔数
        $payCount = PayOrder::checkSuccessCount($userId, date('Y-m-d'));
        //赠送>充值次数
        if ($freeCount >= $payCount) {
            log_user_result($userId, "SendCount:{$freeCount}==PayCount:{$payCount}");
            return;
        }

        UserFreeCall::addRecord($userId, $freeTime, [], UserFreeCall::FROM_RECHARGE);
        log_user_result($userId, "User==AddFreeCall:{$freeTime}");
        return;
    }

    /**
     * 今天赠送（主播）
     */
    function sendHostToday($userId = 0, $freeTime = 2)
    {
        $sendNumLmt = ConfigUtil::freeCallHostLmt();
        //当天已赠送的张数
        $freeCount = UserFreeCall::checkValid($userId, date('Y-m-d'), -2, 'count');
        //赠送
        if ($freeCount >= $sendNumLmt) {
            log_user_result($userId, "SendCount:{$freeCount}");
            return;
        }
        for ($i = $sendNumLmt - $freeCount; $i > 0; $i--) {
            UserFreeCall::addRecord($userId, $freeTime, [], UserFreeCall::FROM_RECHARGE);
        }
        log_user_result($userId, "Host==AddFreeCall:{$freeTime}==SendNum:{$sendNumLmt}");
        return;
    }
}
